package chapter06

/**
  * create by undeRdoG on  2021-06-02  11:31
  * 凡心所向，素履以往，生如逆旅，一苇以航。
  */
object Test11_Object {

  def main(args: Array[String]): Unit = {

    val peter: Student11 = Student11.factory("peter", 18)


    /**
      * 在 scala 中，伴生对象的方法名  如果 为 apply  则调用时方法名可以省略
      **/
    val bob: Student11 = Student11("bob", 20)

    peter.printInfo()
    bob.printInfo()
  }

}


//  主构造器私有化
class Student11 private(val name: String, val age: Int) {
  def printInfo(): Unit = {

    /**
      * school 是当前类的伴生对象中定义出的属性  相当于 java中被 static 修饰的属性
      **/

    println(s"student name ${name}  age ${age}  school ${Student11.school}")
  }
}

// 伴生对象
object Student11 {
  val school: String = "atguigu"

  // 定义一个类对象的工厂方法
  /**
    * 因为伴生对象中是可以访问到 伴生类中的所有方法，包括  private  的方法
    **/
  def factory(name: String, age: Int): Student11 = {
    new Student11(name, age)
  }


  /**
    * 在 scala 中，伴生对象的方法名  如果 为 apply  则调用时方法名可以省略
    **/
  def apply(name: String, age: Int): Student11 = {
    new Student11(name, age)
  }
}